package com.itump.base.util;

import org.hibernate.dialect.Oracle10gDialect;

/**
 * 
 * 标题: 工程信息管理系统<br>
 * 作者：itump<br>
 * 功能描述:在Hibernate中，必需配置一种数据库方言，以适应不同的数据库系统。<br>
 * 本类继承Hibernate自带的Oracle方言，修正了一个性能方面的BUG。<br>
 * 创建时间：2011-10-16 9:29:05<br>
 * 版本信息：1.0 <br>
 * Copyright: Copyright (c) 2011<br>
 * Company: hd<br>
 */
public class Oracle10Dialect extends Oracle10gDialect {

	public String getLimitString(String sql, boolean hasOffset) {
		sql = sql.trim();
		boolean isForUpdate = false;
		if (sql.toLowerCase().endsWith(" for update")) {
			sql = sql.substring(0, sql.length() - 11);
			isForUpdate = true;
		}

		StringBuffer pagingSelect = new StringBuffer(sql.length() + 100);
		// if (hasOffset) {
		pagingSelect
				.append("select * from ( select row_.*, rownum rownum_ from ( ");
		// }
		// else {
		// pagingSelect.append("select * from ( ");
		// }
		pagingSelect.append(sql);
		if (hasOffset) {
			pagingSelect.append(" ) row_ ) where rownum_ <= ? and rownum_ > ?");
		} else {
			// pagingSelect.append(" ) where rownum <= ?");
			pagingSelect.append(" ) row_ ) where rownum_ <= ? and rownum_ > 0");
		}

		if (isForUpdate)
			pagingSelect.append(" for update");

		return pagingSelect.toString();
	}
}
